package pers.ljf.escloud.service.modules.app;

import com.aliyun.oss.OSS;
import pers.ljf.escloud.common.dto.FileItemDTO;
import pers.ljf.escloud.common.dto.OSSClientInfo;
import pers.ljf.escloud.common.dto.SystemFrontConfigDTO;
import pers.ljf.escloud.common.req.FileListReq;

import java.util.List;

public interface FileService {
    /***
     * 获取指定路径下的文件及文件夹, 默认缓存 60 分钟，每隔 30 分钟刷新一次.
     *
     * @param   req
     *          文件路径
     *
     * @return 文件及文件夹列表
     *
     * @throws Exception  获取文件列表中出现的异常
     */
    List<FileItemDTO> fileList(FileListReq req);

    /**
     * 删除fullPath为前缀的所有文件，除了部门文件夹
     *
     * @param bucketName
     * @param fullPath
     * @param ossClient
     * @return 删除文件的大小MB
     */
    long deleteByPrefix(Long userId, String bucketName, String fullPath, OSS ossClient, boolean updateSpace);

    boolean isDeptFolder(String fullPath);

    int deleteFile(String bucketName, String fullPath, OSS client);

    SystemFrontConfigDTO getConfig();

    boolean isFolder(String bucketName, OSS client, String fullPath);

    /**
     * @param client
     * @param fullPathName
     * @param s
     * @return 移动文件大小MB
     */
    long moveObject(OSSClientInfo client, String fullPathName, String s);

    void updateSizeFromOldToNew(Long fromId, Long toId, long sizeMB);

    /**
     * @param filePath 文件全称，"{企业名}/{文件全名含路径}"
     * @return
     */
    FileItemDTO getFileItem(String filePath);
}
